<?php

declare(strict_types=1);

namespace app\middleware;

use app\Request;
use think\facade\Session;
use think\facade\Cookie;

use app\model\{
  User as UserModel,
};

class GetAdminInfo
{

  /**
   * Request实例
   * @var \think\Request
   */
  protected $request;

  /**
   * 权限规则验证
   * Class AdminCkeckRole
   * @package appx\middleware
   */
  public function handle(Request $request, \Closure $next)
  {
    $this->request = $request;
    $this->requestInfo(); // 记录请求信息
    $this->userInfo(); // 记录用户信息

    return $next($request);
  }
  ######################################################################################################################





  ######################################################################################################################
  # 用户信息
  ######################################################################################################################
  protected function userInfo()
  {
    $adminInfo = $this->get_user();
    if ($adminInfo) {
      $this->request->isLogin = 1;
      $this->request->adminInfo = $adminInfo;
      $this->request->sellerId = $adminInfo['id'];
      $this->request->masterId = $adminInfo['master_id'];
      $this->request->operator = $adminInfo['account'];

      // 根据条件显示不同查询数组
      $select = [];
      if ($adminInfo['id'] !== 1) {
        if ($adminInfo['id'] === $adminInfo['master_id']) {
          $select[] = ['master_id', '=', $adminInfo['master_id']];
        } else {
          $select[] = ['seller_id', '=', $adminInfo['id']];
          $select[] = ['master_id', '=', $adminInfo['master_id']];
        }
      }
      $this->request->select = $select;
    }
  }






  ######################################################################################################################
  # 获取登录角色
  ######################################################################################################################
  protected function get_user()
  {
    $info = Cookie::get('domain-user-info');
    if (!$info) return false;

    $user = Session::get('user', null);
    if (!$user) {
      $info = (array) json_decode($info);

      if (isset($info['uagent']) && ($info['uagent'] != md5(request()->header('user-agent') . 'choaloveyou'))) return false;

      $userInfo = UserModel::where('uid', $info['uid'])->find();
      if (!$userInfo) return false;

      if ($info['pwd'] != md5($userInfo['pwd'] . 'choaloveyou')) return false;

      if ($userInfo) {
        $userInfo = $userInfo->toArray();
        Session::set('user', $userInfo);
        return $userInfo;
      }
    }
    return $user;
  }
  ######################################################################################################################












  ######################################################################################################################
  # 请求信息
  ######################################################################################################################

  /**
   * 网站请求信息记录
   * @access public
   * @param  $data['ip']         远程IP地址
   * @param  $data['method']     请求方法
   * @param  $data['type']       当前请求的资源类型
   * @param  $data['referer']    来源网址
   * @param  $data['time']       访问时间
   * @param  $data['is_mobile']  手机访问
   * @param  $data['user_agent'] User-Agent
   * @param  $data['cookie']     请求Cookie
   * @param  $data['url']        当前完整URL
   * @param  $data['controller'] 访问控制器
   * @param  $data['action']     访问操作方法
   * @param  $data['lang']       浏览器语言
   * @return array
   */
  protected function requestInfo()
  {
    # 远程IP地址
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "未知")) {
      $ip = getenv("HTTP_CLIENT_IP");
    } elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "未知")) {
      $ip = getenv("HTTP_X_FORWARDED_FOR");
    } elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "未知")) {
      $ip = getenv("REMOTE_ADDR");
    } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "未知")) {
      $ip = $_SERVER['REMOTE_ADDR'];
    } else {
      $ip = "未知";
    }
    $data['ip'] = $ip; // 远程IP地址

    # 请求方法
    $data['method'] = $this->request->method(); // 请求方法

    # 当前请求的资源类型
    $data['type'] = $this->request->type(); // 当前请求的资源类型

    # 来源网址
    if (isset($_SERVER['HTTP_REFERER']))
      $referer = $_SERVER['HTTP_REFERER'];
    else
      $referer = '';
    $data['referer'] = $referer; // 来源网址

    # 访问时间
    $data['time'] = date("Y-m-d H:i:s", $this->request->time()); // 访问时间

    # 手机访问
    if ($this->request->isMobile())
      $isMobile = 1;
    else
      $isMobile = 0;
    $data['is_mobile'] = $isMobile; // 手机访问

    # User-Agent
    $data['user_agent'] = $this->request->header('user-agent'); // User-Agent

    # 请求Cookie
    $data['cookie'] = $this->request->header('cookie'); // 请求Cookie

    # 当前完整URL
    $data['url'] = $this->request->url(); // 当前完整URL

    # 访问控制器
    $data['controller'] = $this->request->controller(); // 访问控制器

    # 访问操作方法
    $data['action'] = $this->request->action(); // 访问操作方法

    # 浏览器语言
    if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
      $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
      $lang = substr($lang, 0, 5);
      if (preg_match("/zh-cn/i", $lang)) {
        $lang = "简体中文";
      } elseif (preg_match("/zh/i", $lang)) {
        $lang = "繁体中文";
      } else {
        $lang = "English";
      }
    } else {
      $lang = "未知";
    }
    $data['lang'] = $lang; // 浏览器语言

    $this->request->requestInfo = $data;
  }
  ######################################################################################################################





}
